package com.agritech.machine;

import com.agritech.state.IdleState;
import com.agritech.state.MachineState;

/**
 * 农机上下文类 (用于状态模式)
 * 维护一个对状态对象的引用，并可以将请求委托给当前状态对象
 */
public class AgriculturalMachineContext {
    private MachineState currentState; // 当前状态
    private AgriculturalMachine machine; // 关联的农机实体

    public AgriculturalMachineContext(AgriculturalMachine machine) {
        this.machine = machine;
        this.currentState = new IdleState(); // 初始状态为空闲
        System.out.println("农机 " + machine.getId() + " 上下文已创建，初始状态: " + currentState.getStateName());
    }

    /**
     * 设置当前状态
     * @param state 新的状态
     */
    public void setState(MachineState state) {
        System.out.println("农机 " + machine.getId() + " 状态从 '" + this.currentState.getStateName() + 
                           "' 变为 '" + state.getStateName() + "'");
        this.currentState = state;
        this.machine.updateStatus(state.getStateName()); // 更新农机实体中的状态描述
    }

    /**
     * 获取当前状态
     * @return 当前状态对象
     */
    public MachineState getCurrentState() {
        return currentState;
    }

    /**
     * 获取关联的农机实体
     * @return 农机实体
     */
    public AgriculturalMachine getMachine() {
        return machine;
    }

    // 将操作委托给当前状态对象
    public void start() {
        currentState.start(this);
    }

    public void stop() {
        currentState.stop(this);
    }

    public void performTask(String taskDetails) {
        currentState.performTask(this, taskDetails);
    }

    public void repair() {
        currentState.repair(this);
    }
}